package com.itc.dispatch.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Objects;

import com.itc.common.core.validate.Add;
import com.itc.common.core.validate.Update;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotBlank;

/**
 *
 * @TableName alarm_rule
 */
@TableName(value ="alarm_rule")
@Data
public class AlarmRule implements Serializable {
    /**
     * 告警规则主键id
     */
    @TableId(type = IdType.ASSIGN_ID)
    @ApiModelProperty(value = "告警规则主键id")
    private Long id;

    /**
     * 告警类型  1/指标，2/时间，3/文本
     */
    @ApiModelProperty("告警类型  1/指标，2/时间，3/文本")
    private Integer alarmType;

    /**
     * 告警条件
     */
    //
    @ApiModelProperty("告警条件   * 等于=   0                    \n" +
            "     * 小于<   1\n" +
            "     * 大于>   2\n" +
            "     * 大于等于>=  3\n" +
            "     * 小于等于=<  4\n" +
            "     * !=不等于    5\n" +
            "     * 包含 用，隔开两个值  6\n" +
            "     * 不包含 用，隔开两个值  7\n" +
            "     * 往前跳变（包含）  8\n" +
            "     * 往前跳变（不包含）  9\n" +
            "     * 往后跳变（包含）  10  \n" +
            "     * 往后跳变（不包含） 11\n" +
            "     * 跳变  12")
    private Integer condition;


    /**
     * 指标类型告警，左末端判断
     * 比如  >  <=，那就是  indexLeftTail=0，indexRightTail=1，左边符号只能为 >  >=,右边只能为  <  <=
     */
    //
    @ApiModelProperty("左末端包含等号判断。0:不包含  1:包含 ")
    private Integer indexLeftTail;

    /**
     * 指标类型告警，右末端判断
     * 比如  >  <=，那就是  indexLeftTail=0，indexRightTail=1，左边符号只能为 >  >=,右边符号只能为  <  <=
     */
    //
    @ApiModelProperty("右末端包含等号判断。0:不包含  1:包含")
    private Integer indexRightTail;


    /**
     * 两个条件值情况下传递，左值
     */
    //
    @ApiModelProperty("两个条件值情况下传递，左值")
    private Integer leftValue;


    /**
     * 两个条件值情况下传递，右值
     */
    //
    @ApiModelProperty("两个条件值情况下传递，右值")
    private Integer rightValue;

    /**
     * 条件值，一个条件值的情况下
     */
    @ApiModelProperty("条件值，一个条件值的情况下 ")
    private String conditionValue;



    /**
     * 告警等级
     */
    @ApiModelProperty("告警等级 1_第一等级 2_第二等级 3_第三等级 4_第四等级")
    private Integer alarmGrade;

    /**
     * 告警描述内容
     */
    @ApiModelProperty("告警描述内容")
    private String describe;

    /**
     * 未确认是否需要反复推送
     */
    @ApiModelProperty("未确认是否需要反复推送 0否 1是")
    private Integer unconfirmIspushAgain;

    /**
     * 未确认推送时间单位
     */
    @ApiModelProperty("未确认推送时间单位")
    private String unagainTimeUnit;

    /**
     * 未确认推送时间值
     */
    @ApiModelProperty("未确认推送时间值 0否 1是")
    private Integer unagainTimeValue;

    /**
     * 未确认是否需要推送
     */
    @ApiModelProperty("未确认是否需要推送 0否 1是")
    private Integer unconfirmIspush;


    /**
     * 时间跳变类型告警单位
     */
    @ApiModelProperty("时间跳变类型告警单位 0毫秒 1秒 2分 3时")
    private Integer timeUnit;

    /**
     * 已确认是否需要反复推送
     */
    @ApiModelProperty("已确认是否需要反复推送 0否 1是")
    private Integer confirmIspushAgain;

    /**
     * 已确认推送时间单位
     */
    @ApiModelProperty("已确认推送时间单位")
    private String againTimeUnit;

    /**
     * 已确认推送时间值
     */
    @ApiModelProperty("已确认推送时间值 ")
    private Integer againTimeValue;

    /**
     * 已确认是否需要推送
     */
    @ApiModelProperty("已确认是否需要推送 0否 1是")
    private Integer confirmIspush;

    /**
     * 编辑选择字段表
     */
    @ApiModelProperty("编辑选择字段表")
    private String updateTablename;

    /**
     * 编辑选择字段名
     */
    @ApiModelProperty("编辑选择字段名")
    private String updateField;


    /**
     * 告警配置主键id
     */
    @ApiModelProperty("告警配置主键id")
    private Long acId;

    /**
     * 是否触发
     */
    @ApiModelProperty("是否触发 0_否，1是")
    private Integer isSolve;

    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    private String createDate;

    /**
     * 删除
     */
    @ApiModelProperty("删除 0_正常，1_删除")
    private Integer delete;



    /**
     * 更新时间
     */
    @ApiModelProperty("更新时间")
    private String updateDate;



    /**
     * 所选数据集id
     */
    @ApiModelProperty("所选数据集id")
    @NotBlank(message = "所选数据集id不能为空",groups = {Add.class,Update.class})
    private String apiIdentifier;


    /**
     * 所选数据集名称
     */
    @ApiModelProperty("所选数据集名称")
    @NotBlank(message = "所选数据集名称不能为空",groups = {Add.class,Update.class})
    private String dataSetName;


    /**
     * 所选规则定义字段key值
     */
    @ApiModelProperty("所选规则定义字段key值")
    @NotBlank(message = "所选规则定义字段key值不能为空",groups = {Add.class, Update.class})
    private String fieldKey;


    /**
     * 所选规则定义字段title
     */
    @ApiModelProperty("所选规则定义字段title")
    @NotBlank(message = "所选规则定义字段title不能为空",groups = {Add.class,Update.class})
    private String fieldTitle;


    /**
     * 当前数据集所选字唯一标识字段key
     */
    @ApiModelProperty(value = "当前数据集所选字唯一标识字段key",required = true)
    @NotBlank(message = "当前数据集所选字唯一标识字段key不能为空",groups ={Add.class,Update.class} )
    private String uniqueDataKey;


    /**
     * 当前数据集所选字唯一标识字段value
     */
    @ApiModelProperty(value = "当前数据集所选字唯一标识字段value",required = true)
    @NotBlank(message = "当前数据集所选字唯一标识字段不能为空",groups ={Add.class,Update.class} )
    private String uniqueDataValue;


    /**
     * 所选规则定义字段类型
     */
    @ApiModelProperty(value = "所选规则定义字段类型",required = true)
    @NotBlank(message = "所选规则定义字段类型不能为空",groups ={Add.class,Update.class} )
    private String fieldType;


    /**
     * 所选时间类型 天，周，月，季度，年/1，2，3，4，5
     */
    @ApiModelProperty(value = "所选时间类型 天，周，月，季度，年/1，2，3，4，5",required = true)
//    @NotBlank(message = "所选时间类型不能为空",groups ={Add.class,Update.class} )
    private String timeType;

    /**
     * 所选时间key
     */
    @ApiModelProperty(value = "所选时间key",required = true)
//    @NotBlank(message = "所选时间key不能为空",groups ={Add.class,Update.class} )
    private String   timeKey;

    /**
     * 所选时间值
     */
    @ApiModelProperty(value = "所选时间值",required = true)
//    @NotBlank(message = "所选时间值不能为空",groups ={Add.class,Update.class} )
    private String timeValue;

    /**
     * 告警名称
     */
    @TableField(exist = false)
    private String alarmName;

    /**
     * 告警配置类型
     */
    @TableField(exist = false)
    private String configAlarmType;

    /**
     * 关联的其他流程id
     */
    @TableField(exist = false)
    private String flowIds;

    /**
     * 关联的其他告警预警id
     */
    @TableField(exist = false)
    private String alarmIds;

    /**
     * 所有确定席位id
     */
    @TableField(exist = false)
    private String confirmIds;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
